package com.sun.mvc.exception;

import org.slf4j.LoggerFactory;
import org.slf4j.helpers.MessageFormatter;

public class SysException extends RuntimeException {

	private static final long serialVersionUID = -7687421044915429119L;

	/**
	 * 构造器
	 * 
	 * @param msg 文本值
	 * @param params 参数（替换msg中的{}{}...）
	 */
	public SysException(String msg, Object... params) {
		super(MessageFormatter.arrayFormat(msg, params).getMessage());
		printError(msg, params);
	}

	/**
	 * 构造器
	 * 
	 * @param msg 文本值
	 * @param e 异常
	 * @param params 参数（替换msg中的{}{}...）
	 */
	public SysException(String msg, Exception e, Object... params) {
		super(MessageFormatter.arrayFormat(msg, params).getMessage(), e);
		printError(msg, params);
	}

	/**
	 * 日志打印错误信息
	 * 
	 * @param msg 详细错误信息
	 * @param params 替换参数
	 */
	private void printError(String msg, Object... params) {
		StackTraceElement stack[] = (new Throwable()).getStackTrace();
		String ls = new StringBuffer().append("Class: ").append(stack[1].getClassName()).append(" Method: ").append(stack[1].getMethodName())
				.append(" LineNumber: ").append(stack[1].getLineNumber()).toString();
		LoggerFactory.getLogger(ls).error("系统异常-编码错误：" + msg, params);
	}
}
